WHERE (SQL)
"오늘의AI위키"의 AI를 통해 더욱 풍부하고 폭넓은 지식 경험을 누리세요.
1. 개요
WHERE는 SQL에서 특정 조건을 만족하는 데이터를 필터링하는 데 사용되는 예약어이다. WHERE 절은 SQL DML 구문의 일부로, 조건에 따라 데이터를 선택, 수정, 삭제하는 데 활용된다. WHERE 절에서는 비교 연산자, 논리 연산자, IN, BETWEEN, LIKE, IS NULL 등의 연산자를 사용하여 조건을 설정할 수 있으며, 괄호를 사용하여 조건의 우선순위를 지정할 수 있다. LIKE 연산자는 와일드카드를 사용하여 패턴 매칭을 수행하며, SIMILAR TO 연산자는 정규 표현식을 사용한다. LIKE 연산자는 인덱스를 사용하지 않아 대량의 데이터 검색 시 성능 저하를 유발할 수 있으므로, 다른 연산자나 전문 검색을 고려하는 것이 좋다.
더 읽어볼만한 페이지
- SQL 키워드 - TRUNCATE (SQL)
TRUNCATE는 SQL에서 테이블 내의 모든 데이터를 빠르게 삭제하는 명령어로, 외래 키 제약 조건 무시, 테이블 잠금 방식, 트랜잭션 처리 방식 등 DELETE 명령어와 차이를 보이며, WHERE 절을 사용할 수 없어 테이블의 모든 행을 삭제하고, 일부 데이터베이스 시스템에서는 롤백이 불가능할 수 있다. - SQL 키워드 - Null (SQL)
Null은 SQL에서 데이터베이스 테이블 열의 값 부재를 나타내는 특별한 표식으로, 0이나 빈 문자열과 구별되며 삼진 논리와 관련된 특별한 처리 방식으로 인해 데이터베이스 설계 및 쿼리 작성 시 주의가 필요하고 SQL 표준 구현에 대한 논쟁이 존재한다.
WHERE (SQL) |
---|
2. 문법
WHERE 절은 SQL 데이터 조작 언어(DML) 구문에서 특정 조건을 만족하는 행(row)을 선택하는 데 사용된다. 일반적인 형태는 다음과 같다.[6]
```sql
SQL-DML-Statement
FROM table_name
WHERE predicate
```
- `SQL-DML-Statement`: SELECT, UPDATE, DELETE 등 데이터를 조회, 수정, 삭제하는 SQL 문을 의미한다.
- `table_name`: SQL 문이 실행될 대상 테이블의 이름이다.
- `predicate`: 데이터를 선택하기 위한 조건식을 나타낸다. 이 조건식은 참(True), 거짓(False), 또는 알 수 없음(NULL)으로 평가될 수 있다.
WHERE 절의 조건식이 참으로 평가되는 행에 대해서만 SQL 문이 실행된다. 조건식이 거짓 또는 알 수 없음으로 평가되는 행은 SQL 문의 영향을 받지 않는다.
예시:
```sql
SELECT *
FROM mytable
WHERE mycol > 100
```
위 예시는 `mytable`에서 `mycol` 컬럼의 값이 100보다 큰 행만 선택하여 반환한다.
```sql
DELETE
FROM mytable
WHERE mycol IS NULL OR mycol = 100
```
위 예시는 `mytable`에서 `mycol` 컬럼의 값이 NULL이거나 100인 행을 삭제한다.
3. 조건문
WHERE 절에서는 다양한 연산자와 키워드를 사용하여 조건을 표현할 수 있다. 단순 조건문은 `=`, `<>`, `>`, `>=`, `<`, `<=`, `IN`, `BETWEEN`, `LIKE`, `IS NULL` 또는 `IS NOT NULL` 연산자를 사용한다.[1][2]
조건식은 필요에 따라 괄호로 묶을 수 있다. 또한, 여러 개의 조건문을 `AND` 또는 `OR`로 연결할 수 있다. 괄호를 사용하면 연산 우선순위를 명시할 수 있으며, 괄호가 없으면 `AND` 연산자가 `OR` 연산자보다 우선한다.[3]
3. 1. 비교 연산자
`=`, `<>`, `>`, `>=`, `<`, `<=` 등의 비교 연산자를 사용하여 값을 비교하는 조건을 만들 수 있다.[1] 이러한 단순 조건은 `IN`, `BETWEEN`, `LIKE`, `IS NULL` 또는 `IS NOT NULL` 연산자를 사용할 수도 있다.[2]조건식은 필요에 따라 괄호로 묶을 수 있다. 또한, 여러 개의 조건문을 `AND` 또는 `OR`로 연결할 수 있는데, 괄호가 없는 경우 `AND` 연산자가 `OR` 연산자보다 우선되므로 괄호를 사용하여 우선순위를 명시할 수 있다.[3]
다음은 ''mytable'' 테이블에서 ''mycol'' 값이 100보다 크고, '''그리고''' ''item'' 값이 문자열 리터럴 'Hammer'와 같은 행을 삭제하는 예시이다.[4]
```sql
DELETE
FROM mytable
WHERE mycol > 100 AND item = 'Hammer'
3. 2. 논리 연산자
`AND`와 `OR` 키워드를 사용하여 두 개의 조건을 결합하여 새로운 조건으로 만들 수 있다. 여러 조건을 조합할 때 괄호를 사용하여 평가 순서를 지정할 수 있다. 괄호가 없으면 `AND` 연산자가 `OR` 연산자보다 우선순위가 높다.[1]다음은 `mycol` 컬럼 값이 100 이상이고, `item` 컬럼 값이 'Hammer'라는 문자열 리터럴과 일치하는 행을 `mytable`에서 삭제하는 예시이다.[2]
```sql
DELETE
FROM mytable
WHERE mycol > 100 AND item = 'Hammer'
3. 3. IN
`IN`은 후보 셋 내에 있는 어떤 값을 찾는다.[1]```sql
SELECT ename WHERE ename IN ('value1', 'value2', ...)
```
`IN`은 후보 집합에 존재하는 모든 값을 찾는다. 모든 행은 해당 값이 후보 값 집합 중 하나인 경우 술어를 충족한다. 이는 다음과 동일한 동작을 한다.[1]
```sql
SELECT ename WHERE ename='value1' OR ename='value2'
```
위 SQL문은 여러 열의 비교를 허용할 수 있으며, 각 `IN` 절은 그렇지 않다. 후보가 더 많은 경우 `IN`이 덜 장황하다.[1]
`IN`은 바로 뒤에 기술된 데이터 그룹 내에 일치하는 값이 있는지 여부를 판단한다.[2]
```sql
SELECT ename WHERE ename IN ('값1', '값2', ...)
```
이 문장의 경우, ''ename''이 괄호 안의 값 중 하나와 일치하면 참이 된다. 예를 들어 값이 2개인 경우, 다음 문장과 동일하다.[2]
```sql
SELECT ename WHERE ename='값1' OR ename='값2'
```
후자의 방식에서는 여러 열을 판정에 포함시킬 수 있지만, IN에서는 단일 항목만 대상이 된다. 반면, 후보의 건수가 많은 경우에는 IN을 사용하는 것이 더 간결하게 작성할 수 있다.[2]
3. 4. BETWEEN
`BETWEEN` 연산자는 값의 범위를 지정하는 조건이다.[1]예시:
```sql
SELECT ename WHERE ename BETWEEN 'value1' AND 'value2'
```
위 예시는 `ename` 컬럼의 값이 'value1'과 'value2' 사이 (경계값 포함)에 있는 행을 선택한다.[1]
```sql
SELECT salary from emp WHERE salary BETWEEN 5000 AND 10000
```
위 예시는 `salary` 컬럼의 값이 5000과 10000 사이 (경계값 포함)에 있는 행을 선택한다.[1]
다음 예는 수입이 50만엔 이상 100만엔 이하인 데이터를 추출한다.[1]
```sql
SELECT 収入 from emp WHERE 収入 BETWEEN 500000 AND 1000000
3. 5. LIKE
`LIKE`는 특정 조건에 맞는 문자열을 찾는 연산자이다.[2]- 와일드카드를 사용한 패턴:
- `'S%'`: 'S'로 시작하는 모든 문자열을 찾는다.
- `'%S'`: 'S'로 끝나는 모든 문자열을 찾는다.
- `'%S%'`: 문자열 내 어디든 'S'가 포함된 모든 문자열을 찾는다.
- `'%A_E%'`: 'A' 다음에 임의의 한 문자가 오고, 그 뒤에 'E'가 오는 모든 문자열을 찾는다.
- `'[a-zA-Z0-9_]%'`: 문자, 숫자, 또는 '_' 기호로 시작하는 모든 문자열을 찾는다.[5]
`LIKE` 연산자는 일반적으로 인덱스를 사용하지 않고 검색을 수행하므로, 성능상의 주의가 필요하다. `=`나 `<>`와 같은 다른 연산자를 사용하면 성능을 향상시킬 수 있다. 데이터베이스 제품이나 구성에 따라 대소문자 구분(예: 'S'와 's') 여부가 다를 수 있다.
3. 6. SIMILAR TO
PostgreSQL에서 `SIMILAR TO` 연산자는 정규 표현식을 사용하여 패턴 매칭을 수행한다.[3]```sql
string [NOT] SIMILAR TO pattern [ESCAPE escape-character]
```
`SIMILAR TO`는 `LIKE` 구문과 유사하게 작동한다.
3. 7. IS NULL / IS NOT NULL
`IS NULL` 연산자는 값이 NULL인지 확인하는 조건이다. `IS NOT NULL` 연산자는 값이 NULL이 아닌지 확인하는 조건이다.[1]4. 성능 관련 주의 사항
`LIKE` 술어는 일반적으로 인덱스를 사용하지 않고 검색을 수행하므로 성능상의 이점이 없습니다.[2] 대신 '=', '<>' 등을 사용하면 성능이 향상됩니다. 대소문자 구분(예: 'S'와 's')은 데이터베이스 제품 또는 구성에 따라 다를 수 있습니다.
SQL을 사용할 경우, `LIKE` 연산자는 인덱스를 사용하지 않아 성능이 저하될 수 있다는 점을 알아야 합니다. 가능하다면 '='나 '<>' 등의 연산자를 사용하는 것이 성능에 더 좋습니다. 또한, 데이터베이스 소프트웨어에 따라 문자의 처리 방식(대문자와 소문자 등)이 다를 수 있으므로 주의해야 합니다.
참조
[1]
웹사이트
SQL WHERE Clause – Things beginners must know
http://www.programmi[...]
[2]
웹사이트
Microsoft Technet
https://technet.micr[...]
2013-11-21
[3]
웹사이트
9.7. Pattern Matching
https://www.postgres[...]
2023-06-10
[4]
웹사이트
SQL WHERE Clause – Things beginners must know
http://www.programmi[...]
2017-10-09
[5]
웹사이트
Microsoft Technet
https://technet.micr[...]
2013-11-21
[6]
웹인용
SQL Where video tutorial
http://www.sqlserver[...]
본 사이트는 AI가 위키백과와 뉴스 기사,정부 간행물,학술 논문등을 바탕으로 정보를 가공하여 제공하는 백과사전형 서비스입니다.
모든 문서는 AI에 의해 자동 생성되며, CC BY-SA 4.0 라이선스에 따라 이용할 수 있습니다.
하지만, 위키백과나 뉴스 기사 자체에 오류, 부정확한 정보, 또는 가짜 뉴스가 포함될 수 있으며, AI는 이러한 내용을 완벽하게 걸러내지 못할 수 있습니다.
따라서 제공되는 정보에 일부 오류나 편향이 있을 수 있으므로, 중요한 정보는 반드시 다른 출처를 통해 교차 검증하시기 바랍니다.
문의하기 : help@durumis.com